home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 6.4 KB | 155 lines |
- 10000 REM *******************************************************************
- 10010 REM ** DEMO - Program to Demonstrate Animation **
- 10020 REM ** Using Files Created by "The Designer" **
- 10030 REM ** Copyright 1983, by Jan B. Young. Permission is granted to **
- 10040 REM ** all purchasers to copy and modify this program for non- **
- 10050 REM ** commercial uses, providing the copyright notice is retained. **
- 10060 REM *******************************************************************
- 10070 KEY OFF
- 10080 REM *******************************************************************
- 10090 REM ** Put Introduction Panel on Screen **
- 10100 REM *******************************************************************
- 10110 SCREEN 1:COLOR 1,1 'Clear screen
- 10120 LOCATE 6,18:PRINT "T H E"
- 10130 LOCATE 8,16:PRINT "M O U S E"
- 10140 LOCATE 16,8:PRINT "An Animation Demonstration"
- 10150 LOCATE 18,6:PRINT "Copyright 1983 by Jan B. Young"
- 10160 LOCATE 23,8:PRINT "Press Any Key to Continue"
- 10170 X$=INPUT$(1)
- 10180 REM *******************************************************************
- 10190 REM ** Get Sprite and Load in Matrix **
- 10200 REM *******************************************************************
- 10210 OPEN "A:MOUSE.SPR" FOR INPUT AS #1
- 10220 INPUT #1,RES,PAL,ARR,WID,HGHT 'Defines parameters for the mouse
- 10230 DIM MOUSE(ARR)
- 10240 FOR I=0 TO ARR 'Load mouse into array
- 10250 INPUT#1,J(0),J(1),J(2),J(3)
- 10260 P=VARPTR(MOUSE(I))
- 10270 FOR N=0 TO 3
- 10280 POKE P+N,J(N)
- 10290 NEXT N
- 10300 NEXT I
- 10310 CLOSE #1
- 10320 REM *******************************************************************
- 10330 REM ** Put background on Screen **
- 10340 REM *******************************************************************
- 10350 OPEN "A:MAZE.RES" FOR INPUT AS #1
- 10360 INPUT #1,RES,BAK,PAL 'Defines parameters for maze
- 10370 CLOSE #1
- 10380 SCREEN RES:COLOR BAK,PAL:CLS 'Clear screen
- 10390 DEF SEG= &HB800 'Locate screen buffer
- 10400 BLOAD "A:MAZE",0 'Put maze on screen
- 10410 DEF SEG
- 10420 REM *******************************************************************
- 10430 REM ** Animate **
- 10440 REM *******************************************************************
- 10450 HPOS=7:VPOS=4:HNEW=7:VNEW=4:DIR$="E" 'Initial values
- 10460 T = VAL(MID$(TIME$,4,2))*100+VAL(MID$(TIME$,7,2))
- 10470 RANDOMIZE T
- 10480 PUT (HPOS,VPOS),MOUSE 'Put mouse on screen
- 10490 REM LINE (HPOS-5,VPOS-3)-(HPOS+18,VPOS+14),1,B 'Debugging only
- 10500 GOSUB 11250 'Determines freedom to move
- 10510 REM LOCATE 20,20:PRINT NORTH:LOCATE 21,21:PRINT EAST:LOCATE 22,20:PRINT SOUTH:LOCATE 21,19:PRINT WEST:LOCATE 21,30:PRINT DIR$ 'Delete REM for debugging
- 10520 IF DIR$ = "E" THEN GOTO 10570
- 10530 IF DIR$ = "N" THEN GOTO 10720 'DIR$ is direction of motion
- 10540 IF DIR$ = "S" THEN GOTO 10860
- 10550 IF DIR$ = "W" THEN GOTO 11020
- 10560 REM *** Now going east - logic selects next move ***
- 10570 IF EAST=1 THEN GOTO 10630
- 10580 IF SOUTH=1 THEN GOTO 10610 'Value East=1 means OK to go east
- 10590 IF NORTH=1 THEN GOTO 11180 'Value East=0 means path east is blocked
- 10600 GOTO 11170 'See GOTO line for direction chosen
- 10610 IF NORTH=0 THEN 11200
- 10620 I=RND:IF I>0.5 THEN 11200 ELSE 11180
- 10630 IF SOUTH=1 THEN GOTO 10670
- 10640 IF NORTH=1 THEN GOTO 10660
- 10650 GOTO 11190
- 10660 I=RND:IF I>0.4 THEN 11190 ELSE 11180
- 10670 IF NORTH=1 THEN GOTO 10690
- 10680 I=RND:IF I>0.4 THEN 11190 ELSE 11200
- 10690 I=RND:IF I>0.7 THEN 11200
- 10700 IF I>0.4 THEN 11180 ELSE 11190
- 10710 REM *** Now going north- logic selects next move ***
- 10720 IF NORTH=1 THEN GOTO 10780
- 10730 IF WEST=1 THEN GOTO 10760
- 10740 IF EAST=1 THEN GOTO 11190
- 10750 GOTO 11200
- 10760 IF EAST=0 THEN 11170
- 10770 I=RND:IF I>0.5 THEN 11190 ELSE 11170
- 10780 IF WEST=1 THEN GOTO 10820
- 10790 IF EAST=1 THEN GOTO 10810
- 10800 GOTO 11180
- 10810 I=RND:IF I>0.4 THEN 11180 ELSE 11190
- 10820 IF EAST=1 THEN GOTO 10840
- 10830 IF I>0.4 THEN 11180 ELSE 11170
- 10840 I=RND:IF I>0.6 THEN 11180
- 10850 I=RND:IF I>0.3 THEN 11170 ELSE 11190
- 10860 REM *** Now going south- logic selects next move ***
- 10870 IF SOUTH=1 THEN GOTO 10940
- 10880 IF WEST=1 THEN GOTO 10910
- 10890 IF EAST=1 THEN GOTO 11190
- 10900 GOTO 11180
- 10910 IF EAST=0 THEN 11170
- 10920 I=RND:IF I>0.5 THEN 11170 ELSE 11190
- 10930 IF I>0.2 THEN 11170 ELSE 11180
- 10940 IF WEST=1 THEN GOTO 10980
- 10950 IF EAST=1 THEN GOTO 10970
- 10960 GOTO 11200
- 10970 I=RND:IF I>0.4 THEN 11200 ELSE 11190
- 10980 IF EAST=1 THEN GOTO 11000
- 10990 I=RND:IF I>0.4 THEN 11200 ELSE 11170
- 11000 I=RND:IF I>0.7 THEN 11190
- 11010 IF I>0.4 THEN 11170 ELSE 11200
- 11020 REM *** Now going west- logic selects next move ***
- 11030 IF WEST=1 THEN GOTO 11090
- 11040 IF NORTH=1 THEN GOTO 11070
- 11050 IF SOUTH=1 THEN GOTO 11200
- 11060 GOTO 11180
- 11070 IF SOUTH=0 THEN 11180
- 11080 I=RND:IF I>0.5 THEN 11200 ELSE 11180
- 11090 IF NORTH=1 THEN GOTO 11130
- 11100 IF SOUTH=1 THEN GOTO 11120
- 11110 GOTO 11170
- 11120 I=RND:IF I>0.4 THEN 11170 ELSE 11200
- 11130 IF SOUTH=1 THEN GOTO 11150
- 11140 I=RND:IF I>0.4 THEN 11170 ELSE 11180
- 11150 I=RND:IF I>0.7 THEN 11180
- 11160 IF I>0.4 THEN 11200 ELSE 11170
- 11170 DIR$="W":HNEW=HNEW-1:GOTO 11210 '4 statements calculate next position
- 11180 DIR$="N":VNEW=VPOS-1:GOTO 11210
- 11190 DIR$="E":HNEW=HPOS+1:GOTO 11210
- 11200 DIR$="S":VNEW=VPOS+1:GOTO 11210
- 11210 PUT (HPOS,VPOS),MOUSE 'remove mouse from old position
- 11220 REM LINE (HPOS-5,VPOS-3)-(HPOS+18,VPOS+14),0,B 'Debugging only
- 11230 HPOS=HNEW:VPOS=VNEW 'Change position
- 11240 GOTO 10480 'Go back to start
- 11250 REM *******************************************************************
- 11260 REM ** "Feel" for open paths **
- 11270 REM ** Note: Mouse occupies a box extending horizontally from **
- 11280 REM ** HPOS-6 to HPOS+19 and vertically from VPOS-4 to VPOS+15 **
- 11290 REM *******************************************************************
- 11300 WHILE DIR$="E"
- 11310 IF POINT(HPOS+18,VPOS-4)=0 AND POINT(HPOS+19,VPOS-4)<>0 THEN NORTH=1 ELSE NORTH=0
- 11320 IF POINT(HPOS+18,VPOS+15)=0 AND POINT(HPOS+19,VPOS+15)<>0 THEN SOUTH=1 ELSE SOUTH=0
- 11330 IF POINT(HPOS+19,VPOS+6)=0 THEN EAST=1 ELSE EAST=0
- 11340 RETURN
- 11350 WEND
- 11360 WHILE DIR$="W"
- 11370 IF POINT(HPOS-5,VPOS-4)=0 AND POINT(HPOS-6,VPOS-4)<>0 THEN NORTH=1 ELSE NORTH=0
- 11380 IF POINT(HPOS-5,VPOS+15)=0 AND POINT(HPOS-6,VPOS+15)<>0 THEN SOUTH=1 ELSE SOUTH=0
- 11390 IF POINT(HPOS-6,VPOS+6)=0 THEN WEST=1 ELSE WEST=0
- 11400 RETURN
- 11410 WEND
- 11420 WHILE DIR$="N"
- 11430 IF POINT(HPOS-6,VPOS-3)=0 AND POINT(HPOS-6,VPOS-4)<>0 THEN WEST=1 ELSE WEST=0
- 11440 IF POINT(HPOS+19,VPOS-3)=0 AND POINT(HPOS+19,VPOS-4)<>0 THEN EAST=1 ELSE EAST=0
- 11450 IF POINT (HPOS+6,VPOS-4)=0 THEN NORTH = 1 ELSE NORTH = 0
- 11460 RETURN
- 11470 WEND
- 11480 WHILE DIR$="S"
- 11490 IF POINT(HPOS-6,VPOS+14)=0 AND POINT(HPOS-6,VPOS+15)<>0 THEN WEST=1 ELSE WEST=0
- 11500 IF POINT(HPOS+19,VPOS+14)=0 AND POINT(HPOS+19,VPOS+15)<>0 THEN EAST=1 ELSE EAST=0
- 11510 IF POINT (HPOS+5,VPOS+15)=0 THEN SOUTH=1 ELSE SOUTH=0
- 11520 RETURN
- 11530 WEND
-